package com.fh.twopointers;

/**
 * 26. 删除排序数组中的重复项
 * @author fuhao
 * @date 2025/10/14 22:22
 */
public class T26RemoveDuplicates {

    class Solution {
        public int removeDuplicates(int[] nums) {
            // 处理边界情况：如果数组为空或长度为0，直接返回0
            if (nums == null || nums.length == 0) {
                return 0;
            }

            int slow = 0; // 慢指针，指向已去重部分的最后一个元素
            // 快指针fast从第二个元素（索引1）开始遍历
            for (int fast = 1; fast < nums.length; fast++) {
                // 如果快指针指向的元素不等于慢指针指向的元素
                if (nums[fast] != nums[slow]) {
                    slow++; // 慢指针先向后移动一位，指向下一个待填充的位置
                    nums[slow] = nums[fast]; // 将不重复的元素赋值到慢指针的新位置
                }
                // 如果相等，快指针继续后移，慢指针不动
            }
            // 新数组的长度是慢指针索引+1
            return slow + 1;
        }
    }
}
